package vista;

import java.awt.Color;
import java.util.ArrayList;
import java.util.Random;

import ar.uba.fi.algo3.titiritero.Posicionable;
import ar.uba.fi.algo3.titiritero.SuperficieDeDibujo;
import ar.uba.fi.algo3.titiritero.vista.Circulo;
import componentes.Constantes;
import componentes.torre.Torre;
import excepciones.MetodoNoSoportadoException;

public class VistaElementoConAlcance extends VistaElemento {

	private Circulo circuloAlcance;
	private static ArrayList coloresDeAlcances = new ArrayList();
	private static Random rnd = new Random();
	private static final int ALPHA_TRANSPARECY = 100;
	
	static {
		coloresDeAlcances.add(Color.YELLOW);
		coloresDeAlcances.add(Color.RED);
		coloresDeAlcances.add(Color.BLUE);
		coloresDeAlcances.add(Color.GREEN);
		coloresDeAlcances.add(Color.WHITE);
		coloresDeAlcances.add(Color.LIGHT_GRAY);
		coloresDeAlcances.add(Color.CYAN);
	}	
	
	public VistaElementoConAlcance(Torre torre){
		super(torre);
		
		try{
			int alcance = ((Torre)elemento).getAlcance();
			this.circuloAlcance = new Circulo(alcance * Constantes.FACTOR_CONVERSION_POSICION);
			this.circuloAlcance.setPosicionable(calcularPoscionParaAlcance(alcance));
			Color color = (Color) coloresDeAlcances.get(rnd.nextInt(coloresDeAlcances.size()));
			Color yellow = new Color(color.getRed(),color.getGreen(),color.getBlue(),ALPHA_TRANSPARECY);				
			this.circuloAlcance.setColor(yellow);
		} catch (MetodoNoSoportadoException mnse){
			//Si es una torre negra no hacemos nada:			
		}
	}
	
	private Posicionable calcularPoscionParaAlcance(int alcance) {
		int balancePosicion = (alcance) * Constantes.FACTOR_CONVERSION_POSICION - 
									(Constantes.FACTOR_CONVERSION_POSICION / 2);
		PosicionExactaPosicionable posicionableDelCirculo = 
			new PosicionExactaPosicionable(this.getX() - balancePosicion, this.getY() - balancePosicion); 
		return posicionableDelCirculo;
	}
	
	@Override
	public void dibujar(SuperficieDeDibujo superficeDeDibujo) {
		super.dibujar(superficeDeDibujo);
		if (circuloAlcance != null){
			circuloAlcance.dibujar(superficeDeDibujo);
		}
	}	
	
	
}
